home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Shareware / IDimager Personal 4.2.0.3 / setup_IDimager_Personal_V4.exe / {app} / Scripts / Meta Data Scripts / PhotoMechanic Ratings to IDimager.psc < prev    next >
Text File  |  2008-02-16  |  4KB  |  129 lines

  1. {
  2.   Description: This script will import the ratings from Photomechanic to IDI
  3.   Author: HB van Zwietering
  4.   Initial date: 2006-08-18
  5.  
  6.   PhotoMechanic knows 7 flavors for ratings:
  7.  
  8.   1 = Winner
  9.   2 = Winner Alt
  10.   3 = Superior
  11.   4 = Superior Alt
  12.   5 = Typical
  13.   6 = Typical Alt
  14.   7 = Extras
  15.  
  16.   The sequence numbers here are also the numbers found in PM's XMP
  17.  
  18.   We'll translate 7 to IDI rating 1
  19.   We'll translate 5 and 6 to IDI rating 2
  20.   We'll translate 3 and 4 to IDI rating 3
  21.   We'll translate 2 to IDI rating 4
  22.   We'll translate 1 to IDI rating 5
  23. }
  24.  
  25. var
  26.   AXmp: TXMP;
  27.   i, j: Integer;
  28.   ACatItem: TCatalogItem;
  29.   AParam: TMacroParam;
  30.   ATokens: TStringList;
  31.   ARating: Integer;
  32. begin
  33.   if Selected.Count = 0 then
  34.   begin
  35.     Say ('No selection made.');
  36.     exit;
  37.   end;
  38.  
  39.   if not Ask ('Are you sure you want to read PhotoMechanic ratings to IDimager for the selected images?') then
  40.     exit;
  41.  
  42.   Progress.Cancel := False;
  43.   Progress.ProgressBar := True;
  44.   Progress.Max := Selected.Count;
  45.   Progress.Show;
  46.  
  47.   AXmp := TXmp.Create (True);
  48.   ACatItem := TCatalogItem.Create(nil)
  49.   try
  50.     for i := 0 to Selected.Count - 1 do
  51.     begin
  52.       Progress.ProgressText := Selected.Items[i].FileName;
  53.       Progress.Pos := i + 1;
  54.       if Progress.Cancel then
  55.         break;
  56.  
  57.       AXmp.Reset;
  58.  
  59.       // load the item's XMP
  60.       AXmp.Load (Selected.Items[i].XmpFileName, Selected.Items[i].ExifFileName, False);
  61.  
  62.       ARating := -1;
  63.       // find the photomechanic prefs
  64.       AParam := AXmp.FindDesignProperty ('http://ns.camerabits.com/photomechanic/1.0/', 'photomechanic:Prefs');
  65.       if AParam <> nil then
  66.       begin
  67.         ATokens := TStringList.Create;
  68.  
  69.         Tokenize (Nvl(AParam.ParamContent, ''), ':', ATokens);
  70.  
  71.         if ATokens.Count >= 2 then    // the 2nd token (element 1) contains the rating
  72.         begin
  73.           if IsValidNumberSTring (ATokens.Strings[1], False) then        // make sure it's a rating
  74.           begin
  75.             ARating := StrToInt (ATokens.Strings[1]);
  76.  
  77.             if ARating < 1 then
  78.               ARating := 1;
  79.            if ARating > 7 then
  80.              ARating := 7;
  81.  
  82.            // now translate to IDI ratings
  83.            if ARating = 7 then
  84.              ARating := 1
  85.            else if (ARating = 6) or (ARating = 5) then
  86.              ARating := 2
  87.            else if (ARating = 4) or (ARating = 3) then
  88.              ARating := 3
  89.            else if (ARating = 2) then
  90.              ARating := 4
  91.            else if (ARating = 1) then
  92.              ARating := 5;
  93.  
  94.             //Say (ARating);
  95.  
  96.             // now set the default rating XMP tag
  97.             AXmp.QuickSetProperty ('http://ns.adobe.com/xap/1.0/', 'xap:Rating', ARating);
  98.  
  99.             // find the item in catalog
  100.             if Catalog.FindImageCombined (Selected.Items[i], ACatItem, False, phtNone) then
  101.             begin
  102.               ACatItem.Rating := ARating;
  103.               ACatItem.Bookmark := (ATokens.Strings[0] = '1');
  104.  
  105.               Catalog.StoreItemToDatabase (ACatItem, False);
  106.               Catalog.WriteXMPTagsForItem (ACatItem, AXmp, True);
  107.             end;
  108.           end;
  109.         end;
  110.         ATokens.Free;
  111.  
  112.         if ARating <> -1 then
  113.           // resave the item's XMP
  114.           AXmp.Save (Selected.Items[i].XmpFileNameSave, Selected.Items[i].ExifFileName, Selected.Items[i].CanUpdateExif);
  115.       end;
  116.  
  117.       UpdateThumb (Selected.Items[i]);
  118.     end;
  119.   finally
  120.     AXmp.Free;
  121.     ACatItem.Free;
  122.   end;
  123.  
  124.   Progress.Hide;
  125.  
  126.   if Progress.Cancel then
  127.     Say ('Cancelled');
  128. end;
  129.